/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.uruguayviajes.web;

import javax.ejb.EJB;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import javax.faces.validator.ValidatorException;
//import uy.edu.ort.uruguayviajes.modelo.Usuario;
import uy.edu.or.uruguayviajes.negocio.servicios.UsuarioService;
import uy.edu.ort.comun.dominio.dto.ReservaDTO;
import uy.edu.ort.comun.dominio.dto.UsuarioDTO;
import uy.edu.ort.uruguayviajes.negocio.excepciones.UsuarioException;
import uy.edu.ort.uruguayviajes.util.MensajesUtil;

/**
 *
 * @author magui
 */
@ManagedBean
@SessionScoped
public class UsuariosBean {

    private String nombre;
    private String apellido;
    private String direccion;
    private String telefono;
    private String codigoPostal;
    private String ciudad;
    private String mail;
    private Date fechaNac;
    private String sexo;
    private static String usuario;
    private static String password;
    private String confPassword;
     @ManagedProperty(value="#{currentUser}")
    protected static UsuarioDTO currentUser;
    private String pageFrom;
    private List<ReservaDTO> listaReservas;
   
    
    @EJB
    UsuarioService fachadaUsuario;
     
    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getCodigoPostal() {
        return codigoPostal;
    }

    public void setCodigoPostal(String codigoPostal) {
        this.codigoPostal = codigoPostal;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public Date getFechaNac() {
        return fechaNac;
    }

    public void setFechaNac(Date fechaNac) {
        this.fechaNac = fechaNac;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getConfPassword() {
        return confPassword;
    }

    public void setConfPassword(String confPassword) {
        this.confPassword = confPassword;
    }

    public UsuarioDTO getCurrentUser() {
        return currentUser;
    }

    public void setCurrentUser(UsuarioDTO currentUser) {
        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        HttpSession session = (HttpSession)context.getSession(true);
        session.setAttribute("usuarioLogin",usuario);
        this.currentUser = currentUser;
    }

    /** Creates a new instance of UsuariosBean */
    public UsuariosBean() {
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String validarUsuario() {
        try{
        if (fachadaUsuario.validarUsuario(usuario, password)) {
            System.out.println("validar usuario true");
            //currentUser = fachadaUsuario.obtenerUsuario(usuario);
            setCurrentUser(fachadaUsuario.obtenerUsuario(usuario));
            return "index";
        } else {
            System.out.println("validar usuario false");
            return "login";
        }
        }catch(UsuarioException uE){return "login";}
    }

    public void validarPwd(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        String miMsg = MensajesUtil.obtenerMensaje("PWD_INCORRECTO", null);

        if (null != value) {
            String confPwd = (String) value;
            if (!confPwd.equals(this.password)) {
                FacesMessage msg = new FacesMessage(miMsg);
                msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                throw new ValidatorException(msg);
            }
        }
    }

    public void validarEdad(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String miMsg = MensajesUtil.obtenerMensaje("EDAD_INCORRECTA", null);

        int edad = calcularEdad(((Date) value));
        if (edad < 18) {
            FacesMessage msg = new FacesMessage(miMsg);
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg);
        }

    }

    public int calcularEdad(Date fechaNac) {
        Date fecha_hoy = new Date();
        int anio_nac = (fechaNac).getYear();
        int mes_nac = (fechaNac).getMonth();
        int dia_nac = (fechaNac).getDate();
        int ahora_anio = fecha_hoy.getYear();
        int ahora_mes = fecha_hoy.getMonth();
        int ahora_dia = fecha_hoy.getDate();
        int edad = (ahora_anio + 1900) - anio_nac;
        if (ahora_mes < (mes_nac - 1)) {
            edad--;
        }
        if (((mes_nac) == ahora_mes) && (ahora_dia < dia_nac)) {
            edad--;
        }
        if (edad > 1900) {
            edad -= 1900;
        }
        return edad;
    }

    public String registrarUsuario(){
        try{
            UsuarioDTO user = new UsuarioDTO(nombre, apellido, sexo, fechaNac, telefono, codigoPostal, ciudad, mail, usuario, password);
            fachadaUsuario.registrarUsuario(user);
            return "login";
        }catch(UsuarioException uE){
            System.out.println(uE.getMessage());
            return "registroUsuario";
        }
        
    }
    
    public List<ReservaDTO> getListaReservas(){
        listaReservas = fachadaUsuario.getReservas();
        return listaReservas;
    }

    public String limpiarUsuario() {

        nombre = null;
        apellido = null;
        direccion = null;
        telefono = null;
        codigoPostal = null;
        ciudad = null;
        mail = null;
        fechaNac = null;
        sexo = null;
        usuario = null;
        password = null;
        confPassword = null;
        return "index";
        
    }
}
